app.controller('RightsController',  function($cookieStore,InfoAuthService, UiUtilService ,$scope ,$compile ,$http, $state, $window, MODE ,URL) {

	var vm = $scope.vm = {
		infoAuth:{},
		editInfoRole:{},
		searchArgs:{},
		initOptions:[], //列表中空div的id
		initEvent:[], //绑定到列表中空div的事件操作
		auths:{},
		parentShow:false
	}

	/**
	 * bootstrap table初始化
	 */
	$scope.init = function (searchArgs) {
		//---先销毁表格 ---
		$("#authTable").bootstrapTable('destroy');
		//---初始化表格,动态从服务器加载数据---
		$("#authTable").bootstrapTable({
			url:URL.BASEURL + URL.AUTHURL + "getList",
			method:'GET',
			cache:false,
			striped: true, //是否显示行间隔色
			pagination: true, //是否显示分页
			pageSize: 10, //每页的记录行数
			pageNumber: 1, //初始化加载第一页，默认第一页
			queryParams:function queryParams(params){
				//分页参数
				var param = {
					limit: params.pageSize,
					page: params.pageNumber
				};
				for(var key in searchArgs){
					param[key]=searchArgs[key]
				}
				return param;
			},
			queryParamsType:'',
			sidePagination:'server',
			responseHandler : function (res) {
				/*
				 * 加载服务器数据之前的处理程序，可以用来格式化数据。
				 * 参数：res为从服务器请求到的数据。
				 * 这里将服务器返回的数据重新做了组装。
				 */
				var result = {};
				result.rows = res.data.items;
				result.total = res.data.totalCount;
				vm.initOptions = [];//清空数组
				vm.initEvent = [];//清空数组
				vm.searchArgs = {};//清空搜索对象
				return result;
			},
			onLoadError:function (err) {
				if(err == 1001){
					Lobibox.alert("error",{
						msg:'您尚未开通该权限！'
					});
					return;
				}else if(err == 1101){
					location.href = "./"; //跳转到登录页
				}
			},
			columns: [{
				field: 'id',
				title: 'ID',
				align:'center'
			},{
				field: 'authName',
				title: '资源名称',
				align:'center'
			},{
				field: 'authCode',
				title: '资源代码',
				align:'center'
			},{
				field: 'authType',
				title: '资源类型',
				formatter:$scope.typeFormatter,
				align:'center'
			},{
				field: 'authUrl',
				title: '链接地址',
				align:'center'
			},{
				field: 'remark',
				title: '描述',
				align:'center'
			},{
				field: 'createTime',
				title: '创建时间',
				formatter:$scope.dateFormat,
				align:'center'
			},{
				field: 'updateTime',
				title: '更新时间',
				formatter:$scope.dateFormat,
				align:'center'
			},{
				field:'',
				title:'操作',
				formatter:$scope.operateFormatter,
				align:'center'
			}
			],
			onLoadSuccess: function(){
				//加载成功时执行
				//table加载完成之后
				$scope.bindOperate();
			}
		});
	}

	/**
	 * 行为操作
	 * @param value 字段值
	 * @param row  行元素
	 * @param index 行下标
	 */
	$scope.operateFormatter = function (value,row,index) {
		//界面预留一个没有任何class的div
		var str = "<div id = 'row" + row.id +"'></div>";
		//div的id列表
		vm.initOptions.push("row" + row.id);
		//动态的html存在事件
		vm.initEvent.push("<a href='' ng-click = 'edit(" + row.id + ")'>" + "编辑" + "&nbsp&nbsp&nbsp&nbsp"
			+ "</a>" + "<a href='' ng-click = 'delete(" + row.id + ")'>" + "删除" + "</a>");
		return str

	};

	/**
	 * 日期格式化 yyyy-MM-dd HH:mm:ss
	 * @param value
	 * @param row
	 * @param index
	 */
	$scope.dateFormat = function (value,row,index) {
		return UiUtilService.dateFormatter(value);
	};

	/**
	 * 类型格式化
	 */
	$scope.typeFormatter = function (value,row,inde) {
		var result;
		switch (value){
			case 1: result = "目录";break;
			case 2: result = "菜单";break;
			case 3: result = "按钮";break;
		}
		return result;
	};

	/**
	 * 绑定列表操作并编译 使ng-click生效
	 */
	$scope.bindOperate = function (){
		for(var i = 0; i < vm.initOptions.length;i++) {
			var option = vm.initOptions[i];
			var event = vm.initEvent[i];
			//将动态的html添加到记录好的空div中
			var $el = $(event).appendTo("#"+option);
			//利用$compile编译这段代码 使ng-click生效
			$compile($el)($scope);
		}
	};

	/**
	 * 列表查询
	 */
	$scope.queryList = function () {
		if(vm.infoAuth.authName){
			vm.searchArgs.authName = vm.infoAuth.authName;
		}
		$scope.init(vm.searchArgs);
	};

	$scope.queryList();


	/**
	 * 添加角色之前初始化
	 */
	$scope.intiAddRole = function () {
		vm.editInfoAuth = {
			type:1
		};
		vm.selectAuth = {};
		vm.parentShow = false;
	};

	/**
	 * 选择不同资源类型触发
	 * @param type
     */
	$scope.chooseType = function (type) {
		InfoAuthService.findParentElement(type).then(function (data) {
			if(data.code == 1){
				vm.parentShow = true;
				vm.auths = data.data;
				console.log(vm.auths);
			}else{
				Lobibox.alert("error",{
					msg:"数据获取失败!"
				})
			}
		})
	};

	$scope.selectParentAuth = function (auth) {
		vm.selectAuth = $.extend({},true,auth);
	}

	/**
	 * 添加保存
	 */
	$scope.add = function(){
		vm.editInfoAuth.parentId = vm.selectAuth.id;
		InfoAuthService.addAuth(vm.editInfoAuth).then(function(data){
			if(data.code == "1"){
				$('#addAuthModal').modal('hide');
				$scope.queryList();
			};
		});
	};

	/**
	 * 编辑
	 */
	$scope.edit = function(id){
		InfoAuthService.get(id).then(function (data) {
			if(data.code == '1'){
				vm.editInfoAuth = $.extend(true,{},data.data);
				InfoAuthService.findParentElement(vm.editInfoAuth.authType).then(function (data) {
					if(data.code == 1){
						if(vm.editInfoAuth.authType != 1){
							vm.parentShow = true;
						}
						vm.auths = data.data;
						$('#addAuthModal').modal('show');
						vm.selectAuth = {
							id:vm.editInfoAuth.parentId
						}
					}else{
						Lobibox.alert("error",{
							msg:"数据获取失败!"
						})
					}
				});

			}
		});
	};

	/**
	 * 删除
	 */
	$scope.delete = function (id) {
		Lobibox.confirm({
			msg: "确定删除该数据吗？",
			callback: function ($this, type) {
				if (type === 'yes') {
					InfoAuthService.delete(id).then(function (data) {
						if(data.code == '1'){
							Lobibox.alert('success', {
								msg: "删除成功",
								callback: function ($this,type) {
									if(type == 'ok'){
										$scope.queryList();
									}
								}
							});

						}
					});
				}
			}
		});

	};
});